xend: Give back memory to dom0 after a failed auto-balloon attempt.
authorkfraser@localhost.localdomain <kfraser@localhost.localdomain>
Thu, 19 Jul 2007 16:15:49 +0000 (17:15 +0100)
committerkfraser@localhost.localdomain <kfraser@localhost.localdomain>
Thu, 19 Jul 2007 16:15:49 +0000 (17:15 +0100)
Signed-off-by: Frank van der Linden <frank.vanderlinden@sun.com>
tools/python/xen/xend/balloon.py

index 9a57cf9ac927402d28b94894a7d99bdb7b9800b1..69d91e2859e1359ca8d8739ff3366d38fe984937 100644 (file)
@@ -94,7 +94,9 @@ def free(need_mem):
     # track the last used value so that we don't trigger too many watches.
 
     xoptions = XendOptions.instance()
+    dom0 = XendDomain.instance().privilegedDomain()
     xc = xen.lowlevel.xc.xc()
+    dom0_start_alloc_mb = get_dom0_current_alloc() / 1024
 
     try:
         dom0_min_mem = xoptions.get_dom0_min_mem() * 1024
@@ -133,7 +135,6 @@ def free(need_mem):
                         new_alloc_mb = new_alloc / 1024  # Round down
                         log.debug("Balloon: setting dom0 target to %d MiB.",
                                   new_alloc_mb)
-                        dom0 = XendDomain.instance().privilegedDomain()
                         dom0.setMemoryTarget(new_alloc_mb)
                         last_new_alloc = new_alloc
                 # Continue to retry, waiting for ballooning or scrubbing.
@@ -158,7 +159,10 @@ def free(need_mem):
                 (need_mem, dom0_min_mem, dom0_min_mem,
                  free_mem + scrub_mem + dom0_alloc - dom0_min_mem))
         else:
-            raise VmError('The privileged domain did not balloon!')
+            dom0.setMemoryTarget(dom0_start_alloc_mb)
+            raise VmError(
+                ('Not enough memory is available, and dom0 cannot'
+                 ' be shrunk any further'))
 
     finally:
         del xc